package es.ise.core.mbg.plugins;

import java.util.List;

import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.PluginAdapter;
import org.mybatis.generator.config.GeneratedKey;
import org.mybatis.generator.config.TableConfiguration;

/**
 * Este plugin establece propiedades para el model según la tabla:
 * 
 * <ul>
 * <li>Si la tabla tiene clave primaria, añade un comento de autogeneración de clave
 * de Oracle a la columna de la clave primaria, utilizando para ello la secuencia con
 * nombre <i>nombreTabla</i>_S1</li>
 * <li>Si no tiene clave primaria, se considera una vista, y por lo tanto se
 * deshabilitan todas las operaciones de inserción, actualización y borrado ya
 * que carecen de sentido.</li>
 * </ul>
 * 
 * @author Paco
 *
 */
public class TableOrViewPlugin extends PluginAdapter
{
	/**
	 * {@inheritDoc}
	 * 
	 * @return siempre devuelve <code>true</code> porque no hay comprobaciones que hacer
	 */
	@Override
	public boolean validate(List<String> warnings)
	{
		return true;
	}

	@Override
	public void initialized(IntrospectedTable table)
	{
		TableConfiguration config = table.getTableConfiguration();
		// only if there is one primary key column
		if(table.getPrimaryKeyColumns().size() == 1)
		{
			IntrospectedColumn column = table.getPrimaryKeyColumns().get(0);
			String sequence = String.format("SELECT %s_S1.nextval FROM DUAL", config.getTableName());
			config.setGeneratedKey(new GeneratedKey(column.getActualColumnName(), sequence, false, "pre"));
		}
		else
		{
			config.setDeleteByExampleStatementEnabled(false);
			config.setDeleteByPrimaryKeyStatementEnabled(false);
			config.setUpdateByExampleStatementEnabled(false);
			config.setUpdateByPrimaryKeyStatementEnabled(false);
			config.setInsertStatementEnabled(false);
		}
	}

	
}
